package com.example.juc.kingdom_adventures.term3;

import org.junit.Test;

public class Client1 {
    private int number = 0;
    private final Object lock = new Object();

    /**
     * 要给 read 中的代码也加上判断，它也要拿到钥匙后才能读取，这样就能保证读取时不会有写操作，写的时候也没有读取操作
     */
    private void read() {
        synchronized (lock) {
            System.out.println("number = " + number);
        }
    }

    private void write(int change) {
        synchronized (lock) {
            number += change;
            System.out.println("写入 " + number);
        }
    }

    @Test
    public void test() throws InterruptedException {
        // 开启一个线程写入 100 次 number
        new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                write(1);
            }
        }).start();

        // 开启一个线程读取 100 次 number
        new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                read();
            }
        }).start();

        // 睡眠一秒保证线程执行完成
        Thread.sleep(1000);
    }
}
